package com.probiz.estore.order.dao;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import com.probiz.estore.common.model.order.SalesOrder;
import com.probiz.estore.core.dao.GenericDao;
import com.probiz.estore.core.search.SearchCriteria;
import com.probiz.estore.order.model.OrderSearchCriteria;
/**
 * Dao interface for SalesOrder.
 */
public interface SalesOrderDao extends GenericDao<SalesOrder> {
	
	
	 /**
     * 搜索订单
     *
     * @param orderSearchCriteria 自定义搜索条件
     * @param searchCriteria        分页搜索条件
     * @return 搜索结果
     */
    public List<SalesOrder> searchByCriteria(OrderSearchCriteria orderSearchCriteria, SearchCriteria searchCriteria);
	
	
	/**
	 * 统计会员订单
	 * @param userId
	 * @param complete 是否只统计已完成的订单
	 * @return
	 */
	public long countCustomerOrder(Integer userId, boolean complete);
	
	/**
	 * 统计未确认订单
	 * @return
	 */
	public Long countNewArrivalOrder();
	
	/**
	 * 获取最新的订单
	 * @param salesOrder
	 * @return
	 */
	public SalesOrder getLastSalesOrder(Integer customerId);
	/**
	 * 获得指定用户和状态的订单数量
	 * @param userId
	 * @param orderStatus
	 * @return
	 */
	public long countCustomerOrder(Integer userId, Short orderStatus);
	/**
	 * 统计未支付订单
	 * @param customerId
	 * @return
	 */
	public Long countUnPaidSalesOrder(Integer customerId);
	/**
	 * 计算会员在指定日期范围内的消费总金额
	 * @param userId
	 * @param startDate	计算的起止日期（为NULL即计算的开始时间没有上限）
	 * @param endDate	计算的终止日期（为NULL即计算的结束时间没有下限）
	 * @return
	 */
	public BigDecimal getCustomerConsumption(Integer userId, Date startDate, Date endDate);
	
	/**
	 * 订单导出 FOR EAI
	 * @param latestExportTime 最近一次导出时间
	 * @return 需要导出的订单列表
	 */
	public List<SalesOrder> getSalesOrder4Export(Date latestExportTime);
	
}